Database 정규화
1. 데이터베이스 정규화의 목적
삽입, 삭제, 갱신의 이상 현상을 방지한다.
-> 이상 현상이란? 데이터의 삽입, 삭제, 갱신을 하면서 불필요한 정보가 삭제되거나 삽입되고 갱신시 일부만 변경되어 데이터의 일관성이 없어지는 현상이다.
삽입 이상: 만약 위와 같은 테이블에 이름과 학번의 정보만 넣고 싶은 경우 주소, 전공, 담당 교수에 대한 정보까지 넣어야한다. Null이 들어가게 되도 불필요한 저장공간을 차지하게 된다.
삭제 이상: 김공대 교수가 은퇴하여 김공대 교수만 삭제하고 싶어 김공대 교수를 담당 교수로 가지게 된 튜플을 삭제하게 되면 불필요한 다른 학생들의 정보까지 삭제된다.
갱신 이상: 컴퓨터공학의 담당교수를 모두 김공대 교수로 바꾸고 싶지만 일괄적으로 갱신이 되지 않을 수 있다.
데이터의 중복을 최소화 한다
정보의 일관성을 보장한다.
2. 데이터 베이스 정규화
데이터베이스의 정규화에는 제1정규형~제5정규형까지 존재한다. 하지만 보통 제 3정규형까지 적용하여 데이터베이스를 설계한다.
- 제 1정규형 : 도메인이 원자 값
제 1정규형에서 도메인이 원자값이라는 것은 한 도메인에 알맞은 값으로 하나 존재해야 한다는 것을 뜻한다. 위와 같은 테이블에서 과목이라는 테이블을 저장하기 위해 과목 1,과목2,과목 3과 같이 동일한 계열의 컬럼이 여러개로 정의되어 있는 것이나 과목 이라는 컬럼에 {생물1, 생물2, 생물3}와 같이 한번에 여러 값들이 들어갈 수 없고 하나의 값이 들어간다.
-> 다음과 같이 과목이라는 컬럼에 자신들의 과목이 하나씩 들어가게 되지만 학번, 이름, 주소 , 전화번호, 학과코드 등 불필요한 정보들이 많이 중복되게 된다.
제 2 정규형 : 완전 함수종속(부분적 함수 종속 제거)
제 1정규형을 만족하는 테이블이고 부분적 함수 종속성을 제거한다. 테이블에 있는 각 요소들을 하나의 결정자에 의해 그 값이 결정되어야 한다. 예를 들어 위의 제 1정규형 테이블을 보면 학번 -> 이름, 주소,학생의 전화번호를 결정하고 학과코드 -> 학과이름을 결정한다. 즉 같은 테이블에서 학번, 학과코드에 의해 부분적으로 결정되는 데이터들이 있으면 이를 다른 테이블로 나눈다.
제 2정규형을 만들면 하나의 테이블에 있는 데이터는 하나의 결정자에 의해 종속되게 된다. (이름,주소,전화번호) -> 학번에 의해 유일하게 결정되게 되고, (학과 이름) -> 학과코드에 의해 결정된다. 또 (수강과목)-> (학번,학과코드)에 의해 결정 되게 된다.
위의 테이블에서 수강과목 테이블에서 학과의 전화번호는 이행적함수 종속성을 설명하기 위해 임의로추가하였다.
제 3정규형 : 이행적 함수 종속성 제거
제 3정규형은 2정규형을 만족하고 이행적 함수 종속성을 제거한다 . 이행적 함수 종속성이란 A-> B 이면 B->C이게 된다는 조건을 없애는 것이다. 학번을 알면 학과를 알수 있고 학과를 알면 학과의 전화번호를 알 수 있는 것을 말한다. 즉 이렇게 알 수 있는 데이터에 대해서도 정규화를 통해 테이블을 나누게 된다.
- 제 4정규형: 다치 종속성 제거
- 제 5정규형: 조인 종속성 제거
3. 역정규화
데이터베이스의 정규화를 하게 되면 테이블이 나뉘는 경우가 많다. 이 경우 데이터의 조회는 조인을 통한 조회를 하게 되는데 방대한 양의 데이터를 조인하게 되면 시스템에 과부하가 걸릴 가능성이 높다.
이를 피하기 위해 나뉘어진 테이블을 다시 하나의 테이블로 합치는 과정이 필요하게 되는데 이를 역정규화라고 한다.